package cn.itsource.pet.service.impl;

import cn.itsource.basic.service.impl.BaseServiceImpl;
import cn.itsource.org.domain.Shop;
import cn.itsource.org.mapper.ShopMapper;
import cn.itsource.pet.domain.Point;
import cn.itsource.pet.domain.SearchMasterMsg;
import cn.itsource.pet.mapper.SearchMasterMsgMapper;
import cn.itsource.pet.service.ISearchMasterMsgService;
import cn.itsource.user.domain.User;
import cn.itsource.utils.DistanceUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;

@Service
public class SearchMasterMsgServiceImpl extends BaseServiceImpl<SearchMasterMsg> implements ISearchMasterMsgService {

    @Autowired
    private SearchMasterMsgMapper masterMsgMapper;

    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    private ShopMapper shopMapper;
    /*
    前端请求的数据
        address	"武汉市江夏区东湖高新区关东街汤逊湖社区"
        age	0
        coat_color	""
        gender	1
        name	""
        pet_type	null
        price	0
        resources	""
        title	""

        没有用户
        没有关联的店铺
     */
    //保存寻主数据
    @Override
    public void publish(SearchMasterMsg searchMasterMsg,HttpServletRequest request) {
        //根据用户的令牌获取 用户信息
        //1.获取请求头  得到token
        String token = request.getHeader("U-TOKEN");
        //2.去redis里面查找【不会 有前置拦截器】  3.转换一个User对象
        User user = (User) redisTemplate.opsForValue().get(token);
        /*
            计算离用户最近的门店
                地址
                    1.用户发布信息的时候，有一个地址

                    2.店铺入驻的时候 也输入了对应的地址 t_shop
                依次去计算 用户的地址和 店铺地址之间的距离
                选择一件距离最近的就ok

                把用户的地址 转化为经纬度
                把店铺的地址值 转换为经纬度

                求 球面上两个点之间的距离

         */
        //获取用户的经纬度
        Point point = DistanceUtil.getPoint(searchMasterMsg.getAddress());
        //计算离用户最近的门店  [注意shop 里面的地址是正确可用的  不然会空指针异常]
        Shop shop = DistanceUtil.getNearestShop(point, shopMapper.loadAll());

        System.out.println(user);
        System.out.println(user.getId());
        //谁发布的消息
        searchMasterMsg.setUser_id(user.getId());
        //哪个店铺负责处理
        searchMasterMsg.setShop_id(shop.getId());
        searchMasterMsg.setState(0);
        //保存数据
        masterMsgMapper.save(searchMasterMsg);
        //给商家发送一条短信

    }
}
